package panels;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JSplitPane;
import javax.swing.JScrollPane;
import javax.swing.JList;

import dane.Logowanie;
import dane.Towar;
import dane.Utwory;
import dane.Zamow;
import dane.Zapytania;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.ImageIcon;
import javax.swing.ListSelectionModel;
import javax.swing.JSlider;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import javax.swing.JTextArea;
import java.awt.SystemColor;
import javax.swing.UIManager;
import javax.swing.JSeparator;
import javax.swing.ScrollPaneConstants;

/**
 * Program <code>Music Store</code>
 * Klasa <code>Zamowienia</code> tworząca okno z listą zamówień
 * @version 1.0 2013
 * @author Dorota Chyła, Tomasz Bednarski, Wojciech Florkowski, Łukasz Gąsiewicz
 */
public class Zamowienia extends JDialog implements ActionListener {
	
	private final JPanel contentPanel = new JPanel();
	protected JPanel buttonPane;
	private JLabel lblDataZam, lblCena, lblDataWys,
				lblDataZamW, lblCenaW, lblDataWysW;
	private JSplitPane splitPane;
	private JButton okButton, jbWysano, jbAnuluj;
	private JList list;
	private JTextArea jTextAreaUtwory;
	String[] optionJOptionPane = { "Tak", "Nie" };
	
	private Zamow zam;
	private Zapytania zap;
	private Logowanie log;
	
	/**
	 * Konstruktor parametrowy tworzący okno JDialog
	 * @param sql zapytanie SQL
	 */
	protected Zamowienia(String sql) {
		log=Logowanie.pobierzLogowanie();
		zap=new Zapytania();
		setSize(800, 600);
		setTitle(log.getTyp()+": "+log.getImie()+" "+log.getNazwisko()+": Sklep- Zamównienia");
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		splitPane = new JSplitPane();
		splitPane.setOneTouchExpandable(true);
		splitPane.setBounds(10, 11, 764, 507);
		contentPanel.add(splitPane);
		
		Zamow[] z=zap.getAllZam(sql);
		
		list = new JList();
		list.setVisibleRowCount(30);
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setListData(z);
		list.setCellRenderer(new DisplayJListZam());
		
		list.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				list_mouseClicked(e);
			}
		});
		
		JScrollPane scrollPane = new JScrollPane(list);
		splitPane.setLeftComponent(scrollPane);

		JPanel jpRight = new JPanel();
		splitPane.setRightComponent(jpRight);
		jpRight.setLayout(null);
		
		lblDataZam = new JLabel("Data zamówienia");
		lblDataZam.setForeground(Color.GRAY);
		lblDataZam.setBackground(Color.GRAY);
		lblDataZam.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDataZam.setBounds(50, 36, 100, 14);
		jpRight.add(lblDataZam);
		
		lblCena = new JLabel("Cena:");
		lblCena.setForeground(Color.GRAY);
		lblCena.setHorizontalAlignment(SwingConstants.RIGHT);
		lblCena.setBounds(50, 96, 100, 14);
		jpRight.add(lblCena);
		
		lblDataZamW = new JLabel("");
		lblDataZamW.setHorizontalAlignment(SwingConstants.LEFT);
		lblDataZamW.setBounds(160, 36, 200, 14);
		jpRight.add(lblDataZamW);
		
		lblCenaW = new JLabel("");
		lblCenaW.setHorizontalAlignment(SwingConstants.LEFT);
		lblCenaW.setBounds(160, 96, 200, 14);
		jpRight.add(lblCenaW);
		
		int x=0;
		
		lblDataWys = new JLabel("Data wysyłki");
		lblDataWys.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDataWys.setForeground(Color.GRAY);
		lblDataWys.setBounds(50, 66, 100, 14);
		jpRight.add(lblDataWys);
		
		lblDataWysW = new JLabel("");
		lblDataWysW.setHorizontalAlignment(SwingConstants.LEFT);
		lblDataWysW.setBounds(160, 66, 200, 14);
		jpRight.add(lblDataWysW);
		
		jTextAreaUtwory = new JTextArea();
		jTextAreaUtwory.setForeground(Color.BLACK);
		jTextAreaUtwory.setLineWrap(true);
		jTextAreaUtwory.setEditable(false);
		jTextAreaUtwory.setBackground(UIManager.getColor("Panel.background"));
		JScrollPane sp1 = new JScrollPane(jTextAreaUtwory);
		sp1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		sp1.setBounds(10, 141, 620, 353);
		jpRight.add(sp1);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(10, 121, 620, 239);
		jpRight.add(separator);
		
		JLabel lblUtwory = DefaultComponentFactory.getInstance().createTitle("Zamówienie:");
		lblUtwory.setForeground(Color.GRAY);
		lblUtwory.setHorizontalAlignment(SwingConstants.CENTER);
		lblUtwory.setBounds(286, 126, 88, 14);
		jpRight.add(lblUtwory);
		
		JLabel lblDane = DefaultComponentFactory.getInstance().createTitle("Dane:");
		lblDane.setForeground(Color.GRAY);
		lblDane.setHorizontalAlignment(SwingConstants.CENTER);
		lblDane.setBounds(286, 11, 88, 14);
		jpRight.add(lblDane);
		
		
		
		////bottom
		buttonPane = new JPanel();
		buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		
		jbWysano = new JButton("Wysłano");
		jbWysano.addActionListener(this);
		if(log.getTyp().equals("Klient")){
			jbWysano.setEnabled(false);
		}
		buttonPane.add(jbWysano);
		
		jbAnuluj = new JButton("Anuluj");
		jbAnuluj.addActionListener(this);
		buttonPane.add(jbAnuluj);
		if(log.getTyp().equals("Klient")){
			jbAnuluj.setEnabled(false);
		}
			
		okButton = new JButton("Wyjście");
		buttonPane.add(okButton);
		okButton.addActionListener(this);
	}
	
	/**
	 * Metoda obsługująca zdarzenia
	 */
	public void actionPerformed(ActionEvent e) {
		 Object source = e.getSource();
		 ////WYJSCIE
		 if(source == okButton){
			 setVisible(false);
		 }
		 else if(source == jbWysano){
			 if(zam.getDataWys()==null && !zam.getWys()){
				 zap.dodaj("UPDATE zamowienia SET data_wysylki= NOW() WHERE id_zamowienia= '"+zam.getId()+"';");
				 JOptionPane.showMessageDialog(this,
							"Zamównie z dnia: "+zam.getDataZlo()+" zostało oznaczona jako wysłane",
							"Sklep",
							JOptionPane.INFORMATION_MESSAGE);
				 zam.setWys();
			 }else{
				 JOptionPane.showMessageDialog(this,
							"Zamównie z dnia: "+zam.getDataZlo()+" zostało wysłano dnia: "+zam.getDataWys(),
							"Sklep",
							JOptionPane.ERROR_MESSAGE);
			 }
		 }
		 else if(source==jbAnuluj){
			 int value = JOptionPane.showOptionDialog(this, 
						"Czy chcesz na pewno usunąć zamówienie? Wybranie przycisku Tak spowoduje " +
							"jego usunięcie.", // komunikat
						"Pytanie",// nagĹ‚Ăłwek okna 
						JOptionPane.YES_NO_OPTION,  // typ opcji 
						JOptionPane.QUESTION_MESSAGE, // typ komunikatu
						null,						// domyślna ikona
						optionJOptionPane, 	 		// zestaw etykiet przycisków
						optionJOptionPane[0]);  	// inicjacja aktywnego przycisku
					
					if(value == JOptionPane.YES_OPTION) {
						// Zamkniecie aplikacji
						dispose();
						zap.dodaj("DELETE FROM zamowiony_towar WHERE id_zamowienia= "+zam.getId());
						zap.dodaj("DELETE FROM zamowienia WHERE id_zamowienia= "+zam.getId());
					}
		 }
	}
	
	/**
	 * Metoda publiczna reagująca na kliknięcie myszy (wciśnięcie i zwolnienie przycisku w tym samym miejscu)
	 * @param e
	 */
	public void list_mouseClicked(MouseEvent e){
		zam = (Zamow) list.getSelectedValue();
		
		lblDataZamW.setText(String.valueOf(zam.getDataZlo()));
		lblCenaW.setText(String.valueOf(zam.getCena()));
		String txt = String.valueOf(zam.getDataWys());
		if(txt.equals("null"))
			lblDataWysW.setText("---- -- --");
		else
			lblDataWysW.setText(txt);
		
		int x = Integer.valueOf(zam.getId());
		jTextAreaUtwory.setText("");
		Towar[] t = zap.getAllTowar("JOIN zamowiony_towar zt ON t.id_towaru=zt.id_towaru WHERE zt.id_zamowienia= "+x);
		for(int i=0;i<t.length;i++){
			int ilosc=zap.getID("SELECT ilosc FROM zamowiony_towar WHERE id_zamowienia = "+zam.getId()+" AND id_towaru = "+t[i].getId()+";","ilosc");
			jTextAreaUtwory.append((i+1)+".  "+t[i].getNazwaAlbumu()+",  ("+t[i].getCenaMag()+" zł) x "+ilosc+"\n");
		}
	}
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			Zamowienia dialog = new Zamowienia(""+2);
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			System.err.println("Zamowienia: Błąd tworzenia GUI");
		}
	}
}
